package leetcodeHis;


import java.util.ArrayList;
import java.util.List;

/**
 * 将一个给定字符串根据给定的行数，以从上往下、从左到右进行 Z 字形排列。
 *
 * 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时，排列如下：
 * L   C   I   R
 * E T O E S I I G
 * E   D   H   N
 * 之后，你的输出需要从左往右逐行读取，产生出一个新的字符串，比如："LCIRETOESIIGEDHN"。
 *
 *请你实现这个将字符串进行指定行数变换的函数：string convert(string s, int numRows);
 *
 * 示例1
 * 输入: s = "LEETCODEISHIRING", numRows = 3
 * 输出: "LCIRETOESIIGEDHN"
 *
 * 示例2
 * 输入: s = "LEETCODEISHIRING", numRows = 4
 * 输出: "LDREOEIIECIHNTSG"
 * 解释:
 * L     D     R
 * E   O E   I I
 * E C   I H   N
 * T     S     G
 * 0     3     6
 * num为4，中间序列为2， num为3，中间序列为1   n-2
 */
public class Algo_6_Z字形变换 {
    public static void main(String[] args) {
        String s = "LEETCODEISHIRING";
//        System.out.println(convert(s,3));
//        System.out.println(convert(s,4));

        System.out.println(convert("A",1));
    }


    public static String convert(String s, int numRows) {
        List<List<String>> zArr = new ArrayList<>(numRows-1);
        for (int i = 0; i < numRows ; i++) {
            List<String> child = new ArrayList<>();
            zArr.add(child);
        }
        int index = 0;
        int column = 0;
        while (index<s.length() ) {
            int mod = numRows-1 == 0? 0:column%(numRows -1);
            if(mod == 0) {
                for (int i = 0; i < numRows; i++) {
                    if(index < s.length()) {
                        zArr.get(i).add(s.charAt(index++) + "");
                    }
                }
            }else {
                zArr.get(numRows-mod-1).add(s.charAt(index++)+"");
            }
            column++;
        }

        String result = "";
        for (List<String> list : zArr) {
            for (String s1 : list) {
                result = result + s1;
            }
        }

        return result;
    }



    public static String convert2(String s, int numRows) {
        List<StringBuffer> zArr = new ArrayList<>(numRows-1);
        for (int i = 0; i < numRows ; i++) {
            StringBuffer stringBuffer = new StringBuffer();
            zArr.add(stringBuffer);
        }
        int index = 0;
        int column = 0;
        while (index<s.length() ) {
            int mod = numRows-1 == 0? 0:column%(numRows -1);
            if(mod == 0) {
                for (int i = 0; i < numRows; i++) {
                    if(index < s.length()) {
                        zArr.get(i).append(s.charAt(index++));
                    }
                }
            }else {
                zArr.get(numRows-mod-1).append(s.charAt(index++));
            }
            column++;
        }

        String result = "";
        for (StringBuffer stringBuffer : zArr) {
            result = result+new String(stringBuffer);
        }

        return result;
    }
}
